x
1module Clock(
2 input clk,
3 input rstn,
4 output [4:0] sec,
5 output [3:0] min,
6 output [2:0] hour
7);
8 wire seccarry;
9 wire mincarry;
10 Sec sec1(
11 .clk(clk),
12 .rstn(rstn),
13 .sec(sec),
14 .seccarry(seccarry)
15 );
16 Min min1(
17 .clk(clk),
18 .rstn(rstn),
19 .seccarry(seccarry),
20 .min(min),
21 .mincarry(mincarry)
22 );
23 Hour hour1(
24 .clk(clk),
25 .rstn(rstn),
26 .mincarry(mincarry),
27 .seccarry(seccarry),
28 .hour(hour)
29 );
30endmodule
31
32
33
34module Sec(
35 input clk,
36 input rstn,
37 output reg [4:0] sec,
38 output reg seccarry
39);
40 always @(negedge rstn or posedge clk)
41 begin
42 if(rstn)
43 sec < 0;
44 else begin
45 if(sec 19) begin
46 sec < 0;
47 end
48 else begin
49 sec < sec 1;
50 end
51 end
52 end
53 always @() begin
54 if(sec 19)
55 seccarry 1;
56 else
57 seccarry 0;
58 end
59endmodule
60
61module Min(
62 input clk,
63 input rstn,
64 input seccarry,
65 output reg [3:0] min,
66 output reg mincarry
67);
68 always @(negedge rstn or posedge clk)
69 begin
70 if(rstn)
71 min < 0;
72 else begin
73 if(seccarry) begin
74 if(min 9) begin
75 min < 0;
76 end
77 else begin
78 min < min 1;
79 end
80 end
81 end
82 end
83 always @() begin
84 if(min 9)
85 mincarry 1;
86 else
87 mincarry 0;
88 end
89endmodule
90
91
92module Hour(
93 input clk,
94 input rstn,
95 input mincarry,
96 input seccarry,
97 output reg [2:0] hour
98);
99 always @(negedge rstn or posedge clk)
100 begin
101 if(rstn)
102 hour < 0;
103 else begin
104 if(mincarry seccarry) begin
105 if(hour 4) begin
106 hour < 0;
107 end
108 else begin
109 hour < hour 1;
110 end
111 end
112 end
113 end
114endmodule
注:由于我的代码的reset是下降沿有效,故将助教给的testbench文件中的reset的0和1进行了互换。